﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ubatic.Ui.Web.Code;
using Ubatic.Contracts.Services;
using Ubatic.Ui.Web.Classes;
using Ubatic.Common.Dto;
using Ubatic.Contracts.Search;
using Ubatic.Contracts.Contracts;

namespace Ubatic.Ui.Web.Pages
{
    public partial class ProyectosListado : BasePage
    {
        ISecurityService SecurityService;
        IAdminProyectoService AdminProyectoService;
        Usuario usuario;

        protected void Page_Load(object sender, EventArgs e)
        {
            SecurityService = ServiceFactory.GetSecurityService();
            AdminProyectoService = ServiceFactory.GetAdminProyectoService();
            usuario =  SecurityService.GetUserByEmail(Context.User.Identity.Name);
        }       

        private void Buscar()
        {
            SearchProyecto searchProyecto = new SearchProyecto();
            searchProyecto.Titulo = this.txtNombre.Text;
            searchProyecto.CreadorId = usuario.Id;

            List<Proyecto> proyectos = AdminProyectoService.GetProyectos(new ServiceOptions(), searchProyecto);

            this.GridProyectos.DataSource = proyectos;
            this.GridProyectos.DataBind();

            pnlResults.Visible = true;
        }

        protected void lnkBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                Buscar();
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void GridProyectos_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                if (e.CommandName == "editar")
                {
                    int proyectoId = Convert.ToInt32(this.GridProyectos.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                    this.Response.Redirect(string.Format("/Pages/ProyectosDetalle.aspx?Id={0}", proyectoId), true);
                }
                else if (e.CommandName == "eliminar")
                {
                    int proyectoId = Convert.ToInt32(this.GridProyectos.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                    AdminProyectoService.EliminarProyecto(proyectoId);
                    Buscar();
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void GridProyectos_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            try
            {
                this.GridProyectos.PageIndex = e.NewPageIndex;

                Buscar();
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void GridProyectos_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            try
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    e.Row.Cells[0].Attributes.Add("title", "Editar");
                    e.Row.Cells[1].Attributes.Add("title", "Eliminar");
                    ImageButton btnEliminarCtrl = (ImageButton)e.Row.FindControl("btnEliminar");
                    btnEliminarCtrl.OnClientClick = "return confirm('Está seguro que desea eliminar el siguiente registro?')";
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void btnAgregarNuevo_Click(object sender, EventArgs e)
        {
            this.Response.Redirect("/Pages/ProyectosDetalle.aspx", true);
        }
    }
}